{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "468bf34b",
   "metadata": {},
   "source": [
    "# 决策树实验（MNIST & CIFAR-10）\n",
    "\n",
    "本实验将使用决策树模型对MNIST和CIFAR-10数据集进行分类任务，分析其表现并进行可视化。"
   ]
  },
  {
   "cell_type": "code",
   "id": "422e7448",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:47.471409Z",
     "start_time": "2025-05-22T14:42:43.239200Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "id": "ca8c5b5a",
   "metadata": {},
   "source": [
    "## 加载数据集"
   ]
  },
  {
   "cell_type": "code",
   "id": "57ce554f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:48.752806Z",
     "start_time": "2025-05-22T14:42:47.476322Z"
    }
   },
   "source": [
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "id": "d6e63ea8",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "id": "a6b93264",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:59.910618Z",
     "start_time": "2025-05-22T14:42:48.868893Z"
    }
   },
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 5000\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:1000], y_test_m[:1000]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:1000], y_test_c[:1000]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "outputs": [],
   "execution_count": 3
  },
  {
   "cell_type": "markdown",
   "id": "59285464",
   "metadata": {},
   "source": [
    "## 决策树模型训练与评估"
   ]
  },
  {
   "cell_type": "code",
   "id": "17696a64",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:12.440149Z",
     "start_time": "2025-05-22T14:42:59.922877Z"
    }
   },
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    acc = accuracy_score(y_test, y_pred)\n",
    "    cm = confusion_matrix(y_test, y_pred)\n",
    "    return acc, cm, y_pred\n",
    "\n",
    "# MNIST\n",
    "dt_mnist = DecisionTreeClassifier()\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(dt_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST 决策树准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "dt_cifar = DecisionTreeClassifier()\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(dt_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 决策树准确率: {acc_c:.3f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST 决策树准确率: 0.748\n",
      "CIFAR-10 决策树准确率: 0.233\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "id": "8680e746",
   "metadata": {},
   "source": [
    "## 可视化分析"
   ]
  },
  {
   "cell_type": "code",
   "id": "06c45fb3",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:12.719697Z",
     "start_time": "2025-05-22T14:43:12.453308Z"
    }
   },
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('决策树在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20915 (\\N{CJK UNIFIED IDEOGRAPH-51B3}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31574 (\\N{CJK UNIFIED IDEOGRAPH-7B56}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26641 (\\N{CJK UNIFIED IDEOGRAPH-6811}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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AACGIrcHZVJSktTW1kpmZqYZkBMVFSVFRUXOATsVFRVmJKzD6aefLqtWrZLbb79dbr31Vjn++OPNiNdTTjnFjT8FukubwXXO7IHN4YA34v3gGXzaDjYuFgAAL+b2BQcAABjMCEoAACwISgAALAhKAAAsCEoc1JVXXmlWMfrtb3/b6bnrrrvOPKfXtL92yZIlHa7TkcntV0LasGGDebxnzx7nueXLl5vdYw477DCzKMT06dOd04J0Gza9vqvD8fpAb+no++uvv14mTZpkRqPqyjnnn3++c/62/i7qNDYHV7+bRx11VKf1qHVxlX//+9+dXs/xntFjxIgRcuyxx8of/vAH+f77763lfPvtt025dFUZvdfVetc6VlNnFBx55JEycuRIs472f//7317873gnghLdon8sdM7qd9995zynb2SdqnP00Ud3uFb3Cb333nvlm2++6fb3191ibrzxRrnhhhtk06ZN8q9//cv8sdi3b595Xv/A7N692xx/+ctfzLnt27c7z+muMkBv7dy50yyC8uabb8p9990nmzdvNtPVfvKTn5gPhV256667nL+LeugWgA46xU23B1ywYEGXuyLpjkh632effSYPPvigPP7442baiI3ON9cPlrqfb1eWLl0qDz/8sNmV6b333pPRo0eb0D5YCGOQzaOEZ9CtzD799FNZs2aNXH755eacfq0hqZ+A29NPrTt27DC1QX2jdserr74ql112mdln1OHkk092fn3EEUc4vx43bpz5d8KECSxHiD517bXXmtqZbh6vodL+d/Gqq67q8r4xY8Z0uYzmU089Jb/4xS/kmmuukZkzZ5qtBbV2157WXB3364dSfQ/pimP6gbMr5513njm6orVJrfnqnPMLL7zQnPvTn/5k5qhr7XPu3LmW/wm0R40S3aZ/KPRN76Cfjh0rKLWnTUz33HOPPPLII/Lll19263vrH4l3331Xvvjiiz4tM9BdulmC1h615tg+JB0O5UOZhpW+Z6644gqZMmWKTJ48WV588UXrPboJvdZAdYnP3vj8889NM7KGbvt1TePi4rrcxhCuEZToNn2zb9y40YSZHto8qudcueiii8wqSwdrPnLQ6/QPkfb3nHjiiabf5s9//rNZ+xcYCNoKosGmgdZTt9xyi+lbdxza3KneeOMN+fbbb01zp9L3y4oVKzrd/7e//c3cp90WU6dOlZqaGrM5fW84th7sybaEcI2gRLdp86eur/v000+bT8n6te4A0xVtNnrmmWdk69atB/3eOthAP+Vqn5Cu5/t///d/Zg1g7bshLDEQerNImYaa9q07Dl2j2tHqost0Dh/+v16uefPmmQ+Y2o3RnvaB6n3aj6i/99pSc/HFF5vn/vnPf3YI4eeee65XPyd6jqBEj5tfNSg1AG19NurMM880n6R1T9Du0jV7tZ9o5cqVpo9Gj3/84x99UHLATteN1v7JrjaNt9EPjNqs6ji0dUSbcl966SV57LHHTFDqoRs86IfAAwf1aFOv3qeDc/Q5DUxHzVM3jGgfwhdccEG3yuTo8+zJtoRwjaBEj2gNr7m5Wfbv3+9sTrLRaSJ//etfD6lPJDIy0jm6D+hvOkhMf6d1FKmr37n2U5m6Q2t+Ok3kww8/7BB0uvORfthsaWlxeZ9uAqEbPuggHB1lrgN/2oewDhzqDh1kp4HYfltC3ShaQ5htCXuGoESP6EAdbUr95JNPzNcHo/0tOkrW0WfTFR0RuHjxYtMspf2fOrBHm6+0uZc3NQaKhqQGmG75p9OQdM6h/r7r729Pfw+1RnjJJZeYVpL2h47srqurMwOHunLppZea95dt6odOnXKEr2Pwjn6t01GU1o51ytXdd99tRpVrt4a+p3Te5Zw5c3r0s3g7ghL9vhu7zjE7WD+jjszTcNQ/ECeccILpn9GBDfppePz48X1QauDgdJGB8vJy02d40003mWCbNWuW+T1ctmxZt79PWVmZqUk6+hnb05Gn55xzjstBPQ7aTKvzLnV6VVctKroPry7KoYdjb1/9WhcYcNC5yLp4wtVXXy0zZsww4aoBre8tdB/bbAEAYEGNEgAAC4ISAAALghIAAAuCEgAAC4ISAAALghIAAAuCEgAAC4ISAAALghIAAAuCEgAAC4ISAAALghIAAOna/wMCWQFBY7WPBwAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_12412\\3282388306.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_12412\\3282388306.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_12412\\3282388306.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_12412\\3282388306.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBUAAAHqCAYAAABbfXZsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMApJREFUeJzt3Qm8XeO9P/7vyZzIYBaaIIaKNNSs5F7DNRelWqql0ii3CIJSUi9jENxqKa3plrpqrmpVS/8uaigxRV16W0O1lZoVGeUkOWf/X8/qPfnlSCLnPCfJWjvn/X69lpO999p7f7OcnPU9n/08z2qo1Wq1AAAAAGinLu19AgAAAEAiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBWgDX784x9HQ0NDsT3yyCPzPV6r1WLw4MHF43vttVerx1qed9FFFy30dZ966qm595155pnFfe+++26rfX/5y1/G9ttvH6uuumr06dMn1llnnTjggAPinnvuKR7fYYcd5r7Xx23p9QEAPs6f//zn+MY3vlH0G7169Yr+/fvHiBEj4pJLLokPP/xw7n5rr732Qnufj24DBw5std8HH3xQvHZ67I9//OMC6/ja177W6jV69uwZn/zkJ+P000+PmTNntunv8sQTT8RRRx0Vm2++eXTv3r14nY/zox/9KDbccMOitvXXXz8uvfTSNr0PdFbdyi4A6kk6udx4443xL//yL63uf/DBB+Pvf/97caJbmP/4j/+II488sggE2us73/lOnHTSSUWoMHbs2OI1Xn755fjv//7vuPnmm2P33XePU089NQ477LC5z3nyySfj+9//fnz7298uTowtNt544wW+xw9/+MM44YQTolu3Bf9YWHnlleOvf/1rafsBAEvHr371q9h///2LvuaQQw6J4cOHx6xZs4oPVlI/8oc//CGuuuqqj32NXXbZpXjuvHr37t3q9m233TY3bLjhhhvinHPOWeBrpTr+8z//s/jz5MmT4xe/+EWMGzeuCD7S8xbl17/+dfH81AOlkOTFF19c6L5XXnllHHHEEfGFL3yh6E8efvjhOPbYY2PGjBlx8sknL/R56Zhsuumm0aNHjwU+no5fCk5SEFLGfuuuu+5Ca4cOqwGLdO2119bSP5f99tuvtvLKK9dmz57d6vHDDz+8tvnmm9fWWmut2p577tnqsfS8TTbZpPh60UUXLfB1n3zyybn3nXHGGcV977zzTnE7vVf//v1ru+yyywJre+uttxZ4/2233Va8zgMPPNCmv+Oll15aO/XUUxf42Icfflj7xCc+Uep+AMCS98orr9T69u1bGzp0aO3111+f7/GXXnqpdvHFF8+9vbDeZ/To0Yt8r+22267orY4//vjakCFDFrjPyJEja8stt1yr+5qbm2uf+cxnag0NDbU333xzke+T9pkxY0bx51TXwn4FSvustNJK8/19DjrooKKG9957b6Hv8dxzz9VGjBix0Me33nrr4tiVtR8sSaY/QDt8+ctfjn/84x9x7733tkqAf/rTn8ZXvvKVhT4vDRf8t3/7t7jwwgtbDRlsizQNYsqUKcVrLEiaDgEAsDikXmXatGnFFIDVV199vsfXW2+9GDNmTIff59VXXy1GARx44IHF9pe//CUeffTRNj03jW5Io0ZTfvHKK68scv/VVlttvlESC/LAAw8UfV6aKjGv0aNHx/Tp04sRHMD8hArQDmne4DbbbBM33XTT3PvuvvvuYiheOiF+nLSWwVtvvRWXX355u94zhQbpRJjWVHjvvfeyawcAWJTUb6QpAttuu22HXicNy08fjMy7NTY2zn089VLLLbdcsR7DVlttVQzPb8tUhhYtUyNXWGGFWFyeeeaZ4usWW2zR6v60FkOXLl3mPg60JlSAdkojEn7+85/PHXGQToBprYM11ljjY5/3r//6r7HjjjsWayu0Z7RCOoml+YtPP/10rLnmmvHZz342zjvvvJg4cWKH/y4AAC3SyMjXXnstNtpoow6/VhrpsMoqq7Ta5v1QJvVP++yzz9wRBF/60pfi1ltvjTlz5izw9VqCibSOQlr8+vbbby/Wethggw1icXnjjTeia9eu840CTesVrLTSSvH6668vtveCZYlQAdopXXEhhQJ33XVXTJ06tfj6cVMfPjpa4c0334wrrriiXe951llnFQtEpoV4fvOb3xSLMqbUfLPNNlvoaskAAO0NFZJ+/fp1+LVSYJCmi8677bbbbsVj//M//xPPPfdcMa20RfpzCg1Sn/NRaepBSzCRpl+ceOKJxbTQtGDjoq7k0B6pv1vYgodpse72TmGFzsLVH6Cd0glt5513Ln7JTysBNzU1xRe/+MU2PXe77bYr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/W4ceuihZZcGlEBv1DF6o47TH3Wc3qjj9EdtkC4pyT9deumltTXXXLPWo0eP2lZbbVWbMGFC2SXVjfSttKDt2muvLbu0urX99tvXxowZU3YZdeeXv/xlbfjw4bWePXvWhg4dWrvqqqvKLqluTJkypfieSz8He/XqVVtnnXVqp556aq2xsbHs0oCS6I3y6Y2WDP1R++mNOkZ/tGgN6T9tCR8AAAAA5mVNBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBVjGfO1rX4t999137u0ddtghjjvuuKVex29/+9toaGiIDz74YKm/NwBAC70RLFlCBViKJ7R0Iklbjx49Yr311ouzzz475syZs0Tf92c/+1mMGzeuTfs62QEAS4veCJYN3couADqT3XffPa699tpobGyMX//61zF69Ojo3r17jB07ttV+s2bNKk6ui8OKK664WF4HAGBx0xtB/TNSAZainj17xsCBA2OttdaKI488Mnbeeee488475w7LO/fcc2ONNdaIDTbYoNh/0qRJccABB8Tyyy9fnAD32Wef+Otf/zr39ZqamuKEE04oHl9ppZXiW9/6VtRqtVbv+dEhfumkffLJJ8fgwYOLetKnAj/60Y+K191xxx2LfVZYYYUilU91Jc3NzTF+/PgYMmRI9O7dOz796U/HT3/601bvkxqBT37yk8Xj6XXmrRMAYEH0RlD/hApQonSSScl7ct9998ULL7wQ9957b9x1110xe/bs2G233aJfv37x8MMPx+9+97vo27dvkei3POeiiy6KH//4x3HNNdfEI488Eu+9917ccccdH/uehxxySNx0003x/e9/P/74xz/GlVdeWbxuOpHefvvtxT6pjjfeeCMuueSS4nY6af7Xf/1XXHHFFfGHP/whjj/++Dj44IPjwQcfnHuC32+//WLvvfeO3//+93HYYYfFKaecsoSPHgCwrNEbQR2qAUvFyJEja/vss0/x5+bm5tq9995b69mzZ+3EE08sHltttdVqjY2Nc/e//vrraxtssEGxb4v0eO/evWu/+c1viturr7567cILL5z7+OzZs2uDBg2a+z7J9ttvXxszZkzx5xdeeCFF9cV7L8gDDzxQPP7+++/PvW/mzJm1Pn361B599NFW+37961+vffnLXy7+PHbs2NqwYcNaPX7yySfP91oAAC30RrBssKYCLEUpZU/Jd0ra07C5r3zlK3HmmWcW8wc32mijVnMFn3322Xj55ZeLNH5eM2fOjD//+c8xefLkIjHfeuut5z7WrVu32GKLLeYb5tciJeVdu3aN7bffvs01pxpmzJgRu+yyS6v70ycCm266afHnlOrPW0eyzTbbtPk9AIDOSW8E9U+oAEtRmk93+eWXFyfIND8wnehaLLfccq32nTZtWmy++eZxww03zPc6q6yySvaQwvZKdSS/+tWv4hOf+ESrx9K8QwCAXHojqH9CBViK0skxLf7TFptttlnccsstseqqq0b//v0XuM/qq68ejz/+eGy33XbF7XQJpqeffrp47oKkxD99CpDm+6WFkD6q5dOAtMhRi2HDhhUnyFdffXWhKf6GG25YLKo0rwkTJrTp7wkAdF56I6h/FmqEijrooINi5ZVXLlY1TosR/eUvfymulXzsscfG3//+92KfMWPGxPnnnx8///nP409/+lMcddRRH3sd5bXXXjtGjhwZhx56aPGclte89dZbi8fTystpZeM0FPGdd94pkvg0xPDEE08sFiC67rrriuGFEydOjEsvvbS4nRxxxBHx0ksvxUknnVQsZHTjjTcWiyQBACwueiOoJqECVFSfPn3ioYceijXXXLNYPTgl3l//+teLeYMt6fw3v/nN+OpXv1qcDNM8vXSS+/znP/+xr5uGGH7xi18sTrJDhw6Nww8/PKZPn148lobwnXXWWcXqxKuttlocffTRxf3jxo2L0047rVjpONWRVllOQ/7SZZSSVGNaHTmdjNMlldJKyOedd94SP0YAQOehN4JqakirNZZdBAAAAFB/jFQAAAAAsggVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAACIHP8/mOKMP2pGW3UAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  },
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3 (ipykernel)"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
